package com.auicyh.tylb.utils;

import android.support.annotation.NonNull;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.style.ForegroundColorSpan;
import android.widget.EditText;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List;
import java.util.Locale;

/**
 * 作者：  Ocean 2018/8/22 10:19
 * 信息：  Oil com.auicyh.tylb.utils
 * 功能：  字符串处理和时间格式化
 * 邮箱：   1126067113@qq.com
 * 修改人：
 * 公司: 北京天元陆兵汽车科技有限公司
 * @author Ocean
 */
public class StringUtils {
    /**
     * 判断字符串是否为空串
     * @param string 需要判断的字符串
     * @return true 为空串, false 不为空
     */
    public static boolean isStrNull(String string) {
        if (string == null || "null".equals(string) || "NULL".equals(string)) {
            return true;
        }
        String str = string.replace(" ", "");
        return str.length() == 0;
    }

    /**
     * @param str  传入的值
     * @param str2 为空提换的值
     * @return 为空的话返回替换的值否则返回传入的值
     */
    public static String setString(String str, String str2) {
        return StringUtils.isStrNull(str) ? str2 : str;
    }

    /**
     * 获取每个字符出现的次数
     * @param s1 原字符
     * @param s2 要替换的字符
     * @return s2出现的次数
     */
    public static int getStrCount(String s1, String s2) {
        String s = s1.replace(s2, "").trim();
        return (s1.length() - s.length());
    }

    /**
     * 截取json返回
     * @param string 要处理的字符串
     * @return 处理过的json
     */
    public static String getStrJson(@NonNull String string) {
        int begin = string.indexOf("{");
        int end = string.lastIndexOf("}") + 1;
        //  当String 不包含'{' 或者 '}' 返回它本事身
        if (begin == -1 || end == -1) {
            return string;
        }
        return string.substring(begin, end);
    }

    /**
     * 判断编辑框是否为空并提示
     * @param editTexts editTex集合
     * @param errorStr  提示的文字
     * @return 如果全部有内容返回 true
     */
    public static boolean isEditTextNull(List<EditText> editTexts, String errorStr) {
        for (int i = 0; i < editTexts.size(); i++) {
            if ("".equals(editTexts.get(i).getText().toString().trim())) {
                editTexts.get(i).setError(errorStr);
                return false;
            }
        }
        return true;
    }

    /**
     * 判断编辑框是否为空并提示
     * @param editTexts editTex集合
     * @param strArr    提示的内容
     * @return 全部不为空时返回 true
     */
    public static boolean isEditTextNull(List<EditText> editTexts, String[] strArr) {
        for (int i = 0; i < editTexts.size(); i++) {
            if ("".equals(editTexts.get(i).getText().toString().trim())) {
                editTexts.get(i).setError(strArr[i]);
                return false;
            }
        }
        return true;
    }

    /**
     * 判断编辑框是否为空并提示
     * @param editText editTex集合
     * @param str      提示的内容
     * @return 不为空时返回 true
     */
    public static boolean isEditTextNull(EditText editText, String str) {
        if (StringUtils.isStrNull(editText.getText().toString().trim())) {
            editText.setError(str);
            return false;
        }
        return true;
    }


    /**
     * 将长时间格式字符串转换为时间 yyyy-MM-dd HH:mm:ss 格式
     * @param date   要格式的时间毫秒
     * @param format 你要的时间格式 yyyy-MM-dd HH:mm:ss或者yyyy-MM-dd
     * @return 格式化后的时间
     */
    private static String formatDate(Long date, String format) {
        SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.getDefault());
        return formatter.format(date);
    }

    /**
     * @param millis 要格式的时间
     * @param format 格式
     * @return 格式化后的数据
     */
    public static String getDataTime(Long millis, String format) {
        return StringUtils.formatDate(millis, format);
    }

    /**
     * @return 返回当前时间毫秒值
     */
    @NonNull
    public static Long getMillis() {
        Calendar calendar = Calendar.getInstance();
        return calendar.getTimeInMillis();
    }

    /**
     * @return 返回当前时间毫秒值
     */
    public static int getDay() {
        Calendar calendar = Calendar.getInstance();
        return calendar.get(Calendar.DAY_OF_MONTH);
    }

    /**
     * 将长时间格式字符串转换为时间 yyyy-MM-dd HH:mm:ss 格式
     * @param format 你要的时间格式 yyyy-MM-dd HH:mm:ss或者yyyy-MM-dd
     * @return 格式化后的时间
     */
    public static String formatDate(String format) {
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.getDefault());
        return formatter.format(calendar.getTimeInMillis());
    }

    /**
     * 截取整数
     * @param str1 要截取的字符串
     * @param str2 截取的位置
     * @param i    小数点后几位 位置 第一
     * @return 截取的内容
     */
    public static String getCutOut(String str1, String str2, int i) {
        if (str1.contains(str2)) {
            int position = str1.lastIndexOf(str2);
            return str1.substring(0, position + i);
        }
        return str1;
    }

    /**
     * 把Double类型小数，截取整数和小数部分连接成整数
     * 不包含 '.' 直接返回转换后的值
     * 包含 '.' 替换后判断长度，大于10 返回0 超过范围
     * 注意 如果整数部分>= 2，者长度不应该大于11位
     * @param d 这个最好设置为String类型，但这里设置为 double类型更合适
     * @return 整数
     */
    public static int decimalsConvertInteger(double d) throws Exception {
        Double aDouble = d;
        String s = aDouble.toString();
        int count = s.indexOf(".");
        if (count == -1) {
            return aDouble.intValue();
        } else {
            int length = s.length();
            int i = 11;
            if (length > i) {
                // 超过int的取值范围
                return 0;
            } else {
                // 整数部分
                String trunc = s.substring(0, count);
                int truncI = Integer.valueOf(trunc);
                // 小数部分
                String dec = s.substring(count + 1);
                int decI = Integer.valueOf(dec);
                // 小数部分的长度
                int decL = dec.length();
                if (decI == 0) {
                    return truncI;
                } else {
                    int p = (int) Math.pow(10, decL);
                    return truncI * p + decI;
                }
            }

          /*  s = s.replace(".", "").trim();
            int length = s.length();
            int i = 10;
            if (length > i) {
                // 超过int的取值范围
                return -1;
            } else {
                // 转换为整数
                return Integer.valueOf(s);
            }*/
        }
    }

    /**
     * * 设置指定字符的颜色
     * @param textString 设置给文本的字符串
     * @param color      配置字符颜色
     * @param s1         要变色的字符
     * @return textColor
     */
    public static SpannableStringBuilder setCharColor(@NonNull String textString, int color, String s1) {
        SpannableStringBuilder stringBuilder = new SpannableStringBuilder(textString);
        ForegroundColorSpan colorSpan = new ForegroundColorSpan(color);
        // 判断s1是否包含s
        if (textString.contains(s1)) {
            // 获取s首字符在s1中标号 第一个
            int n = textString.lastIndexOf(s1);
            // 设置颜色
            stringBuilder.setSpan(colorSpan, n, n + s1.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
        return stringBuilder;
    }
}
